package com.learning.dubbo.practices.best.services;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * ClassName: DubboPracticesBestServicesApplication
 * Description: 服务化最佳实践
 * 1. 分包。建议将服务接口、服务模型、服务异常等均放在 API 包中。如果需要，也可以考虑在 API 包中放置一份 Spring 的引用配置，这样使用方只需在 Spring 加载过程中引用此配置即可
 * 2. 粒度。服务接口尽可能大粒度，每个服务方法应代表一个功能，而不是某功能的一个步骤。服务接口建议以业务场景为单位划分，并对相近业务做抽象，防止接口数量爆炸。
 * 3. 版本。每个接口都应定义版本号，建议使用两位版本号。version="1.0"
 * 4. 兼容性。服务接口增加方法，或服务模型增加字段，可向后兼容，删除方法或删除字段，将不兼容，枚举类型新增字段也不兼容，需通过变更版本号升级。
 * 5. 枚举值。如果是完备集，可以用 Enum，如果是业务种类，以后明显会有类型增加，不建议用 Enum，可以用 String 代替。
 * 6. 序列化。服务参数及返回值建议使用 POJO 对象，不建议使用接口。消费方和提供方的参数或返回值引用并不是同一个，只是值相同，Dubbo 不支持引用远程对象。
 * 7. 异常。建议使用异常汇报错误，而不是返回错误码，查询方法不建议抛出 checked 异常。
 * 8. 调用。不要只是因为是 Dubbo 调用，而把调用 try...catch 起来。try...catch 应该加上合适的回滚边界上。
 * Provider 端需要对输入参数进行校验。如有性能上的考虑，服务实现者可以考虑在 API 包上加上服务 Stub 类来完成检验。
 * @author Sam Sho
 * @version V1.0.0
 */
@SpringBootApplication
public class DubboPracticesBestServicesApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboPracticesBestServicesApplication.class, args);
    }

}
